最近被問到了這個有點意思的需求,在網路上爬了一陣子發現像這樣的服務其實並沒有想像中的那麼多資源,想說在這邊紀錄一下解法分享給大家
像這種感覺很稀鬆平常的功能,第一個直覺是不相信沒有人做過,隨便去問一下 ChatGPT 也確實給了一些參考做法去達到這樣的要求,只不過都要依賴一些第三方的工具去完成
但今天我的小夥伴只有 python 跟 DarwIO 可以用,就先當作我們手上只有這兩種資源吧 ~ XD
OK 正文開始,需求具體看起來會像是這樣:
給一個 netlist file
module full_adder (sum, carry, a, b, cin);
input a, b, cin;
output sum, carry;
wire w1, w2, w3;
xor g1 (w1, a, b);
xor g2 (sum, w1, cin);
and g3 (w2, a, b);
and g4 (w3, w1, cin);
or g5 (carry, w2, w3);
endmodule
希望他可以直接吐出一張 schematic diagram
當然像這種只有少少的邏輯閘,自己隨便拉一下 5min 左右就搞定了,但問題是今天有上百個邏輯閘的時候,就是一個比較惱人的需求的
想出來的解法就是,去 parse 這份給定的 netlist file,然後去寫出一份 xml 讓 drawIO 讀進去之後就是擺好跟拉好線的邏輯閘。
嘿對,就是這麼單純,直接上程式碼給大家用
主要就兩個重點:
分析 netlist 的 input / output / gate 跟 gate 的 level
這邊的重點就是 gate 的 level 要知道,才能抓說大概這個 gate 擺在哪裡接的線畫起來會最順
根據對應的資料去加入 drawIO 讀得懂的 xml,這些元件就需要自己先存起來再開來看一下
大概先這樣,有想到其他的再來更新 XD